//class Solution {
//public:
//    int iceBreakingGame(int num, int target) {
//        int pos = 0;
//        for (int i = 2; i <= num; i++)
//        {
//            pos = (pos + target) % i;
//        }
//        return pos;
//    }
//};

//class Solution {
//public:
//    vector<vector<int>> ret;
//    vector<int> path;
//    vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
//        dfs(root, targetSum);
//        return ret;
//    }
//    void dfs(TreeNode* root, int targetSum)
//    {
//        if (root == nullptr) return;
//        int tmp = targetSum - root->val;
//        path.push_back(root->val);
//        if (tmp == 0 && root->left == nullptr && root->right == nullptr)
//        {
//            ret.push_back(path);
//            path.pop_back();
//            return;
//        }
//        dfs(root->left, tmp);
//        dfs(root->right, tmp);
//        path.pop_back();
//    }
//};

//class Solution {
//public:
//    vector<int> grayCode(int n) {
//        vector<int> ret;
//        ret.push_back(0);
//        ret.push_back(1);
//        for (int i = 2; i < (1 << n); i++)
//        {
//            ret.push_back(i ^ (i >> 1));
//        }
//        return ret;
//    }
//};

